package wahadlo.model;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * Klasa jest standardową implementacją {@link Model| modelu}. Przechowuje dane
 * w postaci {@link Map| mapy} <{@link String}, {@link Object}>.
 * 
 * @author Koziołek
 * 
 */
public class StandardModel implements Model, Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * Model
	 */
	private Map<String, Object> model;

	/**
	 * Konstruktor domyślny tworzy {@link Map| mapę}.
	 */
	public StandardModel() {
		model = new HashMap<String, Object>();
	}

	/**
	 * Metoda pozwala na dodanie do modelu obiektu.
	 * 
	 * @param key
	 *            klucz pod jakim będzie występował obiekt
	 * @param value
	 *            obiekt
	 */
	public void add(String key, Object value) {
		model.put(key, value);
	}

	/**
	 * Metoda pozwala na dodanie do modelu innego modelu.
	 * 
	 * @param model
	 *            inny model
	 */
	public void add(Model model) {
		this.addAll(model.getProperties());
	}

	/**
	 * Metoda pozwala na dodanie do modelu {@link Map| mapy} <{@link Object},
	 * {@link Object}>
	 * 
	 * @param modelPart
	 */
	@SuppressWarnings("unchecked")
	public void addAll(Map<? extends Object, ? extends Object> modelPart) {
		model.putAll((Map<String, Object>) modelPart);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see wahadlo.model.Model#getProperties()
	 */
	public Map<Object, Object> getProperties() {
		return new HashMap<Object, Object>(model);
	}

}
